<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    

<script>
// 需求：有多个不确定完成时间的异步程序，如何保证它们的执行顺序？1 2 3

/* setTimeout(function (){
    console.log( '异步任务1' );
},1234)
setTimeout(function (){
    console.log( '异步任务2' );
},2234)
setTimeout(function (){
    console.log( '异步任务3' );
},834) */

// setTimeout(function (){
//     console.log( '异步任务1' );
//     setTimeout(function (){
//         console.log( '异步任务2' );
//         setTimeout(function (){
//             console.log( '异步任务3' );
//         },834)
//     },2234)
// },1234)

// 回调地狱：多个回调函数嵌套，不方便阅读和维护

// let p1 = new Promise((resolve,reject)=>{
//     setTimeout(function (){
//         console.log( '异步任务1' );
//         resolve();
//     },1234)
// })

// let p2 = new Promise((resolve,reject)=>{
//     setTimeout(function (){
//         console.log( '异步任务2' );
//         resolve();
//     },2234)
// })

// let p3 = new Promise((resolve,reject)=>{
//     setTimeout(function (){
//         console.log( '异步任务3' );
//         resolve();
//     },834)
// })


// 函数调用后返回一个Promise对象
function doSomeThing(task,time){
    return new Promise((resolve,reject)=>{
        setTimeout(function (){
            console.log( task );
            resolve();
        },time)
    })
}

// doSomeThing('任务1',1234)// p1
// .then(()=>{// 成功的回调函数
//     // 任务1 已完成
//     return doSomeThing('任务2',2234)
// })// p2
// .then(()=>{
//     // 任务2 已完成
//     return doSomeThing('任务3',834)
// })// p3
// .then(()=>{
//     // 任务3 已完成
//     console.log( '任务123已完成' );
// })
// .catch((err)=>{
//     console.log( err );
// })


// async function test(){}
// test();


(async function (){
    await doSomeThing('任务1',1234);
    await doSomeThing('任务2',2234);
    await doSomeThing('任务3',834);
})();

</script>
</body>
</html>